package com.fowo.api.sys.service;

import com.fowo.api.sys.entity.SysFile;
import org.springframework.util.StringUtils;

/**
 * 文件扩展处理器
 * @author yl_ls
 */
public interface FileExtHandler {
    /**
     * 获取扩展处理器的命名
     */
    String name();

    /**
     * 执行文件扩展处理器
     * @param sysFile 待处理系统文件
     * @param args 参数
     * @throws Exception 异常
     * @return 回写到 ext 当前位置的信息
     */
    String run(SysFile sysFile, String[] args) throws Exception;

    /**
     * 处理布尔数命名参数
     * @param args 入口参数数组
     * @param name 要获取的参数名
     * @return 参数值，或 null
     */
    default Boolean parseBooleanArg(String[] args, String name) {
        String value = parseArg(args, name);
        if (StringUtils.hasText(value)) {
            return Boolean.valueOf(value);
        }
        else {
            return null;
        }
    }

    /**
     * 处理浮点数命名参数
     * @param args 入口参数数组
     * @param name 要获取的参数名
     * @return 参数值，或 null
     */
    default Float parseFloatArg(String[] args, String name) {
        String value = parseArg(args, name);
        if (StringUtils.hasText(value)) {
            return Float.valueOf(value);
        }
        else {
            return null;
        }
    }

    /**
     * 处理整数命名参数
     * @param args 入口参数数组
     * @param name 要获取的参数名
     * @return 参数值，或 null
     */
    default Integer parseIntegerArg(String[] args, String name) {
        String value = parseArg(args, name);
        if (StringUtils.hasText(value)) {
            return Integer.valueOf(value);
        }
        else {
            return null;
        }
    }

    /**
     * 处理文本命名参数
     * @param args 入口参数数组
     * @param name 要获取的参数名
     * @return 参数值，或 null
     */
    default String parseArg(String[] args, String name) {
        for (String arg : args) {
            if (arg.startsWith(name + "=")) {
                return arg.substring(name.length() + 1);
            }
        }
        return null;
    }
}
